package EnumLearn;


import org.junit.jupiter.api.Test;

/**
 * @author Lenl
 * @version v1.0
 * @create 2021-06-04 16:03
 * @description 使用enum关键字定义枚举类
 *
 * 说明：定义的枚举类自动继承于java.lang.Enum,toString()返回属性名，可重写
 *
 * 1.Enum类的常用方法：
 *  values():返回枚举类型的对象数组，很方便地遍历所有枚举类
 *  valueOf(String str):把一个字符串转为对应的枚举类，要求字符串必须是枚举类对
 *  toString():返回当前枚举类对象常量的名称
 *2.使用enum关键字定义枚举类实现接口的情况
 *  1，实现接口，在类中实现抽象方法
 *  2.让枚举类的对象分别实现接口中的抽象方法
 *
 */
public class EnumTest {
    @Test
    public  void test(){
        Season1 s1=Season1.SUMMER;
        System.out.println(s1.toString());
    }

    @Test
    public void testEnum(){
        //values()
        Season1[] season1s=Season1.values();
        for(int i=0;i<season1s.length;i++){
            System.out.println(season1s[i]);
        }
        System.out.println("*************");
        //如遍历线程状态
        Thread.State[] values = Thread.State.values();
        for (int i=0;i<values.length;i++){
            System.out.println(values[i]);
        }

        //valueOf(str) 返回同名的枚举对象，如果没找到会抛异常
        Season1 s= Season1.valueOf("WINTER");
        System.out.println(s);
        s.show();

    }

}

interface Info{
    void show();
}
//枚举类实现接口可以让每个对象都实现一下以展示不同效果，也可以总的实现一下，展示同一效果


enum Season1 implements Info{
    //1.提供当前类的枚举对象，多个对象之间用，隔开，末尾用;结束
    SPRING("春天","春暖花开"){
        @Override
        public void show() {
            System.out.println("春天在哪里");
        }
    },
    SUMMER("夏天","夏日炎炎"){
        @Override
        public void show() {
            System.out.println("粉红的回忆");
        }
    },
    AUTUMN("秋天","秋高气爽"){
        @Override
        public void show() {
            System.out.println("秋天不回来");
        }
    },
    WINTER("冬天","冰天雪地"){
        @Override
        public void show() {
            System.out.println("大约在冬季");
        }
    };

    //2.声明Season对象的属性：private final修饰
    private  final String seasonName;
    private final String seasonDesc;

    //3.私有化类的构造器，并给属性赋值
    private  Season1(String seasonName,String seasonDesc){
        this.seasonDesc=seasonDesc;
        this.seasonName=seasonName;
    }

    //其他诉求同SeasonTest


    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }


//    @Override
//    public void show() {
//        System.out.println("季节");
//    }
}